package com.mwh.yuantu.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mwh.yuantu.dao.*;
import com.mwh.yuantu.entity.CollectionInfoEntity;
import com.mwh.yuantu.entity.UserInfoEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import java.util.List;
import java.util.Map;

public class BaseService extends BaseConstant {

    @Autowired
    public UserInfoDao iUserInfoDAO;

//    @Autowired
//    public GroupInfoDao groupInfoDao;

//    @Autowired
//    public UserProfileInfoDao userProfileInfoDao;

//    @Autowired
//    public ReplyInfoDao replyInfoDao;

//    @Autowired
//    public CommentInfoDao commentInfoDao;

//    @Autowired
//    public CollectionInfoDao collectionInfoDao;

//    @Autowired
//    public HistoryInfoDao historyInfoDao;

//    @Autowired
//    public ApiInfoDao apiInfoDao;

//    @Autowired
//    public TagInfoDao tagInfoDao;

    @Autowired
    public ChannelInfoDao channelInfoDao;

//    @Autowired
//    public NavInfoDao navInfoDao;

    @Autowired
    public TypeInfoDao iTypeInfoDAO;

    @Autowired
    public TypeFieldDao iTypeFieldDAO;

    @Autowired
    public FieldInfoDao iFieldInfoDAO;

    @Autowired
    public FieldProfileInfoDao iFieldProfileInfoDAO;

    @Autowired
    public ApiInfoDao iApiInfoDAO;

    @Autowired
    public TagInfoDao iTagInfoDAO;

    @Autowired
    public TemplateInfoDao iTemplateInfoDAO;

    @Autowired
    public CollectionInfoDao iCollectionInfoDAO;

    @Autowired
    public VideoInfoDao iVideoInfoDAO;

    @Autowired
    public CommentInfoDao iCommentInfoDAO;

    @Autowired
    public ReplyInfoDao iReplyInfoDAO;

    @Autowired
    public EmailInfoDao iEmailInfoDAO;

    @Autowired
    public WebInfoDao iWebInfoDAO;

    @Autowired
    public GroupInfoDao iGroupInfoDAO;

    @Autowired
    public UserProfileInfoDao iUserProfileInfoDAO;

    @Autowired
    public HistoryInfoDao iHistoryInfoDAO;

    @Autowired
    public MediaInfoDao iMediaInfoDAO;

    @Autowired
    public NavInfoDao iNavInfoDAO;

    @Autowired
    public PlayerInfoDao iPlayerInfoDAO;

    @Autowired
    public SeoInfoDao iSeoInfoDAO;

    @Autowired
    public QiniuInfoDao iQiniuInfofoDAO;

    @Autowired
    public SlideInfoDao iSlideProfileInfoDAO;

    @Autowired
    public StarInfoDao iStarInfoDAO;

    @Autowired
    public ActivateInfoDao iActivateInfoDAO;

//    @Autowired
//    public GroupInfoService groupInfoService;
//
//    @Autowired
//    public EmailInfoService emailInfoService;
//
//    @Autowired
//    public ActivateInfoService activateInfoService;


    @Value("${mybatis-plus.global-config.db-config.columnFormat}")
    public String columnFormat;

    public UserInfoEntity getLoginUser() {
//        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
//        String userId = auth.getName();
//        if (userId.equals("anonymousUser")) {
//            throw new UnAuthenticatedException("认证失效,请重新登录");
//        }
//        QueryWrapper<UserInfoEntity> query = new QueryWrapper<UserInfoEntity>();
//        query.eq("username", userId);
//        UserInfoEntity loginUser = userInfoDao.getOne(query, false);

        UserInfoEntity loginUser = new UserInfoEntity();
        loginUser.setId(1);
        loginUser.setLoginName("admin");


        return loginUser;
    }

    public <T> Page<T> page(Class<T> entityClass, String pageSize, String currentPage) {
        Page<T> page = null;
        if (pageSize != null && currentPage != null && !"".equals(pageSize) && !"".equals(currentPage)) {
            long size = Long.valueOf(pageSize);
            long current = Long.valueOf(currentPage);
            page = new Page<T>(current, size);
        }
        return page;
    }

    public String getTableColumnDataType(List<Map> definitions, String tableColumn) {
        String result = "字符型";
        Map definition = null;
        for (Map item : definitions) {
            String columnName = (String) item.get("column_name");
            if (columnName.equals(tableColumn)) {
                definition = item;
                break;
            }
        }
        if (definition != null) {
            String dataType = (String) definition.get("data_type");
            if (dataType.contains("timestamp")) {
                result = "日期型";
            } else if (dataType.contains("text")) {
                result = "文本型";

            } else if (dataType.contains("integer")) {
                result = "数值型";

            } else if (dataType.contains("character")) {
                result = "字符型";
            }
        }

        return result;
    }

//    public File getFileByMd5(String md5) {
//        if (md5 == null || "".equals(md5)) {
//            return null;
//        }
//        String filePath = destPath + File.separator + APP_FILES + File.separator + MERGE + File.separator + md5;
//        File folder = new File(filePath);
//        if (!folder.exists()) {
//            throw new MindriveException("没有找到上传文件");
//        }
//        if (folder.listFiles().length == 0) {
//            throw new MindriveException("没有找到上传文件");
//        }
//        File file = folder.listFiles()[0];
//        return file;
//
//    }

//    public UserEntity getLoginUser() {
//        Neo4jProperties.Authentication auth = SecurityContextHolder.getContext().getAuthentication();
//        String userId = auth.getName();
//        QueryWrapper<UserEntity> query = new QueryWrapper<UserEntity>();
//        query.eq("user_id", userId);
//        UserEntity loginUser = userDao.getOne(query, false);
//        return loginUser;
//    }

//    public Integer getTableAllErrorCount(String tableId) {
//        QueryWrapper<ImportRecordEntity> query = new QueryWrapper<ImportRecordEntity>();
//        query.eq("table_id", tableId);
//        List<ImportRecordEntity> records = importRecordDao.list(query);
//        int errorCount = 0;
//        for (ImportRecordEntity record : records) {
//            if (record.getErrorCount() != null) {
//                errorCount += record.getErrorCount();
//            }
//
//        }
//        return errorCount;
//    }

    public int getPageCount(int total, int pageSize) {
        if (total % pageSize == 0) {
            return total / pageSize;
        }
        return total / pageSize + 1;
    }

//    public MetadataEntity getCheckMetadata(String columnName, List<MetadataEntity> metadatas) {
//        MetadataEntity metadata = null;
//        for (MetadataEntity item : metadatas) {
//            if (item.getName().equals(columnName.toLowerCase())) {
//                metadata = item;
//                break;
//            }
//        }
//        return metadata;
//    }
//
//    public MetadataRelationEntity getCheckRelation(String metaDataId, List<MetadataRelationEntity> relations) {
//        MetadataRelationEntity relation = null;
//        for (MetadataRelationEntity item : relations) {
//            if (item.getMetadataId().equals(metaDataId)) {
//                relation = item;
//                break;
//            }
//        }
//        return relation;
//    }
//
//    public String checkImport(String tableId, String tableName, String columnName, Object valueObj,
//                              List<MetadataEntity> metadatas, List<MetadataRelationEntity> relations) {
//        String error = "";
//        MetadataEntity metadata = getCheckMetadata(columnName, metadatas);
//        if (metadata == null) {
//            return error;
//        }
//
//        String value = String.valueOf(valueObj);
//
//        MetadataRelationEntity relation = getCheckRelation(metadata.getId(), relations);
//        if (relation.getIsMandatory() && (value == null || "".equals(value))) {
//            error = String.format("元数据[%s]不能为空", columnName);
//            return error;
//        }
//
//        if (metadata.getDataType().equals("varchar(256)") && value != null) {
//            if (value.length() > 255) {
//                error = String.format("元数据[%s]的值[%s]的长度超过了255", columnName, value);
//                return error;
//            }
//
//        }
//        if (!relation.getIsRepeatability() && (value != null && !"".equals(value.trim()))) {// 元数据对应的数据不能重复
//            int count = tableDao.getTableDataCountByColumn(tableName, columnName.toLowerCase(), value.trim());
//            if (count != 0) {
//                error = String.format("元数据[%s]的值[%s]重复", columnName, value);
//                return error;
//            }
//
//        }
//
//        if (relation.getConstraintType() != null && "值域".equals(relation.getConstraintType())) {
//            String constraintValue = relation.getConstraintValue();
//            if (constraintValue != null && !"".equals(constraintValue)) {
//                List<String> constraintValues = ConvertUtil.split(constraintValue);
//                if (value != null && !"".equals(value.trim()) && !constraintValues.contains(value.trim())) {
//                    error = String.format("元数据[%s]的值域为[%s],值[%s]不在该值域内", columnName, constraintValue,
//                            value);
//                    return error;
//                }
//            }
//        }
//
//        if (relation.getConstraintType() != null && "正则表达式".equals(relation.getConstraintType())) {
//            String constraintValue = relation.getConstraintValue();
//            if (constraintValue != null && !"".equals(constraintValue)) {
//                if (value != null && !"".equals(value.trim()) && !Pattern.matches(constraintValue, value.trim())) {
//                    error = String.format("元数据[%s]的值[%s]不符合正则表达式[%s]的格式要求", columnName, value,
//                            constraintValue);
//                    return error;
//                }
//            }
//        }
//
//        if (relation.getConstraintType() != null && "函数校验".equals(relation.getConstraintType())) {
//            String constraintValue = relation.getConstraintValue();
//            if (constraintValue != null && "二代身份证校验".equals(constraintValue)) {
//
//                if (value != null && !"".equals(value.trim()) && !IdentityCardVerifyUtil.checkIDCard(value.trim())) {
//                    error = String.format("元数据[%s]的值[%s]不符合二代身份证格式要求", columnName, value);
//                    return error;
//                }
//            }
//        }
//
//        return error;
//    }


    public String INDEX() {
        return String.format(columnFormat, "index");
    }

    public String NO() {
        return String.format(columnFormat, "no");
    }

    public String ORDER() {
        return String.format(columnFormat, "order");
    }

}
